
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Module ErgoSpec.Common.Types.ErgoType</title>
<meta name="description" content="Documentation of Coq module ErgoSpec.Common.Types.ErgoType" />
<link href="coq2html.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="coq2html.js"> </script>
</head>

<body onload="hideAll('proofscript')">
<h1 class="title">Module ErgoSpec.Common.Types.ErgoType</h1>
<div class="coq">
<br/>
<br/>
<span class="kwd">Require</span> <span class="kwd">Import</span> <span class="id"><a href="http://coq.inria.fr/library/Coq.Strings.String.html">String</a></span>.<br/>
<span class="kwd">Require</span> <span class="kwd">Import</span> <span class="id"><a href="http://coq.inria.fr/library/Coq.Lists.List.html">List</a></span>.<br/>
<br/>
<span class="kwd">Require</span> <span class="kwd">Import</span> <span class="id"><a href="ErgoSpec.Common.Utils.Provenance.html">ErgoSpec.Common.Utils.Provenance</a></span>.<br/>
<span class="kwd">Require</span> <span class="kwd">Import</span> <span class="id"><a href="ErgoSpec.Common.Utils.Names.html">ErgoSpec.Common.Utils.Names</a></span>.<br/>
<span class="kwd">Require</span> <span class="kwd">Import</span> <span class="id"><a href="ErgoSpec.Common.Utils.Result.html">ErgoSpec.Common.Utils.Result</a></span>.<br/>
<span class="kwd">Require</span> <span class="kwd">Import</span> <span class="id"><a href="ErgoSpec.Common.Utils.Ast.html">ErgoSpec.Common.Utils.Ast</a></span>.<br/>
<br/>
<span class="kwd">Section</span> <span class="id"><a name="ErgoType">ErgoType</a></span>.<br/>
&nbsp;&nbsp;<span class="kwd">Section</span> <span class="id"><a name="ErgoType.Ast">Ast</a></span>.<br/>
&nbsp;&nbsp;&nbsp;&nbsp;<span class="kwd">Context</span> {<span class="id">A</span>:<span class="kwd">Set</span>}. <br/>
&nbsp;&nbsp;&nbsp;&nbsp;<span class="kwd">Context</span> {<span class="id">N</span>:<span class="kwd">Set</span>}. <br/>
&nbsp;&nbsp;<br/>
&nbsp;&nbsp;&nbsp;&nbsp;<span class="kwd">Inductive</span> <span class="id"><a name="ergo_type">ergo_type</a></span> :=<br/>
&nbsp;&nbsp;&nbsp;&nbsp;| <span class="id"><a name="ErgoTypeAny">ErgoTypeAny</a></span> : <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ErgoType.Ast.A">A</a></span> -&gt; <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ergo_type">ergo_type</a></span>                               <span class="docright">(* any type  *)</span><br/>
&nbsp;&nbsp;&nbsp;&nbsp;| <span class="id"><a name="ErgoTypeNothing">ErgoTypeNothing</a></span> : <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ErgoType.Ast.A">A</a></span> -&gt; <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ergo_type">ergo_type</a></span>                           <span class="docright">(* nothing type  *)</span><br/>
&nbsp;&nbsp;&nbsp;&nbsp;| <span class="id"><a name="ErgoTypeUnit">ErgoTypeUnit</a></span> : <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ErgoType.Ast.A">A</a></span> -&gt; <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ergo_type">ergo_type</a></span>                              <span class="docright">(* unit type  *)</span><br/>
&nbsp;&nbsp;&nbsp;&nbsp;| <span class="id"><a name="ErgoTypeBoolean">ErgoTypeBoolean</a></span> : <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ErgoType.Ast.A">A</a></span> -&gt; <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ergo_type">ergo_type</a></span>                           <span class="docright">(* bool atomic type  *)</span><br/>
&nbsp;&nbsp;&nbsp;&nbsp;| <span class="id"><a name="ErgoTypeString">ErgoTypeString</a></span> : <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ErgoType.Ast.A">A</a></span> -&gt; <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ergo_type">ergo_type</a></span>                            <span class="docright">(* string atomic type  *)</span><br/>
&nbsp;&nbsp;&nbsp;&nbsp;| <span class="id"><a name="ErgoTypeDouble">ErgoTypeDouble</a></span> : <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ErgoType.Ast.A">A</a></span> -&gt; <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ergo_type">ergo_type</a></span>                            <span class="docright">(* double atomic type  *)</span><br/>
&nbsp;&nbsp;&nbsp;&nbsp;| <span class="id"><a name="ErgoTypeLong">ErgoTypeLong</a></span> : <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ErgoType.Ast.A">A</a></span> -&gt; <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ergo_type">ergo_type</a></span>                              <span class="docright">(* long atomic type  *)</span><br/>
&nbsp;&nbsp;&nbsp;&nbsp;| <span class="id"><a name="ErgoTypeInteger">ErgoTypeInteger</a></span> : <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ErgoType.Ast.A">A</a></span> -&gt; <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ergo_type">ergo_type</a></span>                           <span class="docright">(* integer atomic type  *)</span><br/>
&nbsp;&nbsp;&nbsp;&nbsp;| <span class="id"><a name="ErgoTypeDateTime">ErgoTypeDateTime</a></span> : <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ErgoType.Ast.A">A</a></span> -&gt; <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ergo_type">ergo_type</a></span>                          <span class="docright">(* date and time atomic type  *)</span><br/>
&nbsp;&nbsp;&nbsp;&nbsp;| <span class="id"><a name="ErgoTypeClassRef">ErgoTypeClassRef</a></span> : <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ErgoType.Ast.A">A</a></span> -&gt; <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ErgoType.Ast.N">N</a></span> -&gt; <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ergo_type">ergo_type</a></span>                     <span class="docright">(* relative class reference  *)</span><br/>
&nbsp;&nbsp;&nbsp;&nbsp;| <span class="id"><a name="ErgoTypeOption">ErgoTypeOption</a></span> : <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ErgoType.Ast.A">A</a></span> -&gt; <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ergo_type">ergo_type</a></span> -&gt; <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ergo_type">ergo_type</a></span>               <span class="docright">(* optional type  *)</span><br/>
&nbsp;&nbsp;&nbsp;&nbsp;| <span class="id"><a name="ErgoTypeRecord">ErgoTypeRecord</a></span> : <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ErgoType.Ast.A">A</a></span> -&gt; <span class="id"><a href="http://coq.inria.fr/library/Coq.Init.Datatypes.html#list">list</a></span> (<span class="id"><a href="http://coq.inria.fr/library/Coq.Strings.String.html#string">string</a></span>*<span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ergo_type">ergo_type</a></span>) -&gt; <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ergo_type">ergo_type</a></span> <span class="docright">(* record type  *)</span><br/>
&nbsp;&nbsp;&nbsp;&nbsp;| <span class="id"><a name="ErgoTypeArray">ErgoTypeArray</a></span> : <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ErgoType.Ast.A">A</a></span> -&gt; <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ergo_type">ergo_type</a></span> -&gt; <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ergo_type">ergo_type</a></span>                <span class="docright">(* array type  *)</span><br/>
&nbsp;&nbsp;&nbsp;&nbsp;| <span class="id"><a name="ErgoTypeSum">ErgoTypeSum</a></span> : <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ErgoType.Ast.A">A</a></span> -&gt; <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ergo_type">ergo_type</a></span> -&gt; <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ergo_type">ergo_type</a></span> -&gt; <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ergo_type">ergo_type</a></span>     <span class="docright">(* sum type  *)</span><br/>
&nbsp;&nbsp;&nbsp;&nbsp;.<br/>
<br/>
&nbsp;&nbsp;&nbsp;&nbsp;<span class="kwd">Definition</span> <span class="id"><a name="type_annot">type_annot</a></span> (<span class="id">et</span>:<span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ergo_type">ergo_type</a></span>) : <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ErgoType.Ast.A">A</a></span> :=<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="kwd">match</span> <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#et">et</a></span> <span class="kwd">with</span><br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ErgoTypeAny">ErgoTypeAny</a></span> <span class="id">a</span> =&gt; <span class="id">a</span><br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ErgoTypeNothing">ErgoTypeNothing</a></span> <span class="id">a</span> =&gt; <span class="id">a</span><br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ErgoTypeUnit">ErgoTypeUnit</a></span> <span class="id">a</span> =&gt; <span class="id">a</span><br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ErgoTypeBoolean">ErgoTypeBoolean</a></span> <span class="id">a</span> =&gt; <span class="id">a</span><br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ErgoTypeString">ErgoTypeString</a></span> <span class="id">a</span> =&gt; <span class="id">a</span><br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ErgoTypeDouble">ErgoTypeDouble</a></span> <span class="id">a</span> =&gt; <span class="id">a</span><br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ErgoTypeLong">ErgoTypeLong</a></span> <span class="id">a</span> =&gt; <span class="id">a</span><br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ErgoTypeInteger">ErgoTypeInteger</a></span> <span class="id">a</span> =&gt; <span class="id">a</span><br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ErgoTypeDateTime">ErgoTypeDateTime</a></span> <span class="id">a</span> =&gt; <span class="id">a</span><br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ErgoTypeClassRef">ErgoTypeClassRef</a></span> <span class="id">a</span> <span class="id">_</span> =&gt; <span class="id">a</span><br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ErgoTypeOption">ErgoTypeOption</a></span> <span class="id">a</span> <span class="id">_</span> =&gt; <span class="id">a</span><br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ErgoTypeRecord">ErgoTypeRecord</a></span> <span class="id">a</span> <span class="id">_</span> =&gt; <span class="id">a</span><br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ErgoTypeArray">ErgoTypeArray</a></span> <span class="id">a</span> <span class="id">_</span> =&gt; <span class="id">a</span><br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ErgoTypeSum">ErgoTypeSum</a></span> <span class="id">a</span> <span class="id">_</span> <span class="id">_</span> =&gt; <span class="id">a</span><br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="kwd">end</span>.<br/>
<br/>
&nbsp;&nbsp;&nbsp;&nbsp;<span class="kwd">Record</span> <span class="id"><a name="ergo_type_signature">ergo_type_signature</a></span> : <span class="kwd">Set</span> :=<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="id"><a name="mkErgoTypeSignature">mkErgoTypeSignature</a></span><br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ <span class="id"><a name="type_signature_annot">type_signature_annot</a></span> : <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ErgoType.Ast.A">A</a></span>;<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="id"><a name="type_signature_params">type_signature_params</a></span> : <span class="id"><a href="http://coq.inria.fr/library/Coq.Init.Datatypes.html#list">list</a></span> (<span class="id"><a href="http://coq.inria.fr/library/Coq.Strings.String.html#string">string</a></span> * <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ergo_type">ergo_type</a></span>);<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="id"><a name="type_signature_output">type_signature_output</a></span> : <span class="id"><a href="http://coq.inria.fr/library/Coq.Init.Datatypes.html#option">option</a></span> <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ergo_type">ergo_type</a></span>;<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="id"><a name="type_signature_emits">type_signature_emits</a></span>  : <span class="id"><a href="http://coq.inria.fr/library/Coq.Init.Datatypes.html#option">option</a></span> <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ergo_type">ergo_type</a></span>; }.<br/>
<br/>
&nbsp;&nbsp;&nbsp;&nbsp;<span class="kwd">Inductive</span> <span class="id"><a name="ergo_type_declaration_desc">ergo_type_declaration_desc</a></span> :=<br/>
&nbsp;&nbsp;&nbsp;&nbsp;| <span class="id"><a name="ErgoTypeEnum">ErgoTypeEnum</a></span> : <span class="id"><a href="http://coq.inria.fr/library/Coq.Init.Datatypes.html#list">list</a></span> <span class="id"><a href="http://coq.inria.fr/library/Coq.Strings.String.html#string">string</a></span> -&gt; <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ergo_type_declaration_desc">ergo_type_declaration_desc</a></span><br/>
&nbsp;&nbsp;&nbsp;&nbsp;| <span class="id"><a name="ErgoTypeTransaction">ErgoTypeTransaction</a></span> : <span class="id"><a href="ErgoSpec.Common.Utils.Ast.html#is_abstract">is_abstract</a></span> -&gt; @<span class="id"><a href="ErgoSpec.Common.Utils.Ast.html#extends">extends</a></span> <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ErgoType.Ast.N">N</a></span> -&gt; <span class="id"><a href="http://coq.inria.fr/library/Coq.Init.Datatypes.html#list">list</a></span> (<span class="id"><a href="http://coq.inria.fr/library/Coq.Strings.String.html#string">string</a></span> * <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ergo_type">ergo_type</a></span>) -&gt; <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ergo_type_declaration_desc">ergo_type_declaration_desc</a></span><br/>
&nbsp;&nbsp;&nbsp;&nbsp;| <span class="id"><a name="ErgoTypeConcept">ErgoTypeConcept</a></span> : <span class="id"><a href="ErgoSpec.Common.Utils.Ast.html#is_abstract">is_abstract</a></span> -&gt; @<span class="id"><a href="ErgoSpec.Common.Utils.Ast.html#extends">extends</a></span> <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ErgoType.Ast.N">N</a></span> -&gt; <span class="id"><a href="http://coq.inria.fr/library/Coq.Init.Datatypes.html#list">list</a></span> (<span class="id"><a href="http://coq.inria.fr/library/Coq.Strings.String.html#string">string</a></span> * <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ergo_type">ergo_type</a></span>) -&gt; <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ergo_type_declaration_desc">ergo_type_declaration_desc</a></span><br/>
&nbsp;&nbsp;&nbsp;&nbsp;| <span class="id"><a name="ErgoTypeEvent">ErgoTypeEvent</a></span> : <span class="id"><a href="ErgoSpec.Common.Utils.Ast.html#is_abstract">is_abstract</a></span> -&gt; @<span class="id"><a href="ErgoSpec.Common.Utils.Ast.html#extends">extends</a></span> <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ErgoType.Ast.N">N</a></span> -&gt; <span class="id"><a href="http://coq.inria.fr/library/Coq.Init.Datatypes.html#list">list</a></span> (<span class="id"><a href="http://coq.inria.fr/library/Coq.Strings.String.html#string">string</a></span> * <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ergo_type">ergo_type</a></span>) -&gt; <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ergo_type_declaration_desc">ergo_type_declaration_desc</a></span><br/>
&nbsp;&nbsp;&nbsp;&nbsp;| <span class="id"><a name="ErgoTypeAsset">ErgoTypeAsset</a></span> : <span class="id"><a href="ErgoSpec.Common.Utils.Ast.html#is_abstract">is_abstract</a></span> -&gt; @<span class="id"><a href="ErgoSpec.Common.Utils.Ast.html#extends">extends</a></span> <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ErgoType.Ast.N">N</a></span> -&gt; <span class="id"><a href="http://coq.inria.fr/library/Coq.Init.Datatypes.html#list">list</a></span> (<span class="id"><a href="http://coq.inria.fr/library/Coq.Strings.String.html#string">string</a></span> * <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ergo_type">ergo_type</a></span>) -&gt; <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ergo_type_declaration_desc">ergo_type_declaration_desc</a></span><br/>
&nbsp;&nbsp;&nbsp;&nbsp;| <span class="id"><a name="ErgoTypeParticipant">ErgoTypeParticipant</a></span> : <span class="id"><a href="ErgoSpec.Common.Utils.Ast.html#is_abstract">is_abstract</a></span> -&gt; @<span class="id"><a href="ErgoSpec.Common.Utils.Ast.html#extends">extends</a></span> <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ErgoType.Ast.N">N</a></span> -&gt; <span class="id"><a href="http://coq.inria.fr/library/Coq.Init.Datatypes.html#list">list</a></span> (<span class="id"><a href="http://coq.inria.fr/library/Coq.Strings.String.html#string">string</a></span> * <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ergo_type">ergo_type</a></span>) -&gt; <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ergo_type_declaration_desc">ergo_type_declaration_desc</a></span><br/>
&nbsp;&nbsp;&nbsp;&nbsp;| <span class="id"><a name="ErgoTypeGlobal">ErgoTypeGlobal</a></span> : <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ergo_type">ergo_type</a></span> -&gt; <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ergo_type_declaration_desc">ergo_type_declaration_desc</a></span><br/>
&nbsp;&nbsp;&nbsp;&nbsp;| <span class="id"><a name="ErgoTypeFunction">ErgoTypeFunction</a></span> : <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ergo_type_signature">ergo_type_signature</a></span> -&gt; <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ergo_type_declaration_desc">ergo_type_declaration_desc</a></span><br/>
&nbsp;&nbsp;&nbsp;&nbsp;| <span class="id"><a name="ErgoTypeContract">ErgoTypeContract</a></span> :<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ergo_type">ergo_type</a></span>                              <span class="docright">(* template type  *)</span><br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&gt; <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ergo_type">ergo_type</a></span>                           <span class="docright">(* state type  *)</span><br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&gt; <span class="id"><a href="http://coq.inria.fr/library/Coq.Init.Datatypes.html#list">list</a></span> (<span class="id"><a href="http://coq.inria.fr/library/Coq.Strings.String.html#string">string</a></span> * <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ergo_type_signature">ergo_type_signature</a></span>) <span class="docright">(* clauses signatures  *)</span><br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&gt; <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ergo_type_declaration_desc">ergo_type_declaration_desc</a></span>.<br/>
<br/>
&nbsp;&nbsp;&nbsp;&nbsp;<span class="kwd">Record</span> <span class="id"><a name="ergo_type_declaration">ergo_type_declaration</a></span> :=<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="id"><a name="mkErgoTypeDeclaration">mkErgoTypeDeclaration</a></span><br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ <span class="id"><a name="type_declaration_annot">type_declaration_annot</a></span> : <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ErgoType.Ast.A">A</a></span>;<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="id"><a name="type_declaration_name">type_declaration_name</a></span> : <span class="id"><a href="ErgoSpec.Common.Utils.Names.html#local_name">local_name</a></span>;<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="id"><a name="type_declaration_type">type_declaration_type</a></span> : <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ergo_type_declaration_desc">ergo_type_declaration_desc</a></span>; }.<br/>
<br/>
&nbsp;&nbsp;&nbsp;&nbsp;<span class="kwd">Section</span> <span class="id"><a name="ErgoType.Ast.Abstract">Abstract</a></span>.<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="kwd">Definition</span> <span class="id"><a name="type_declaration_is_abstract">type_declaration_is_abstract</a></span><br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(<span class="id">decl_desc</span>:<span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ergo_type_declaration_desc">ergo_type_declaration_desc</a></span>) : <span class="id"><a href="ErgoSpec.Common.Utils.Ast.html#is_abstract">is_abstract</a></span> :=<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="kwd">match</span> <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#decl_desc">decl_desc</a></span> <span class="kwd">with</span><br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ErgoTypeEnum">ErgoTypeEnum</a></span> <span class="id">_</span> =&gt; <span class="id"><a href="http://coq.inria.fr/library/Coq.Init.Datatypes.html#false">false</a></span><br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ErgoTypeTransaction">ErgoTypeTransaction</a></span> <span class="id">isabs</span> <span class="id">_</span> <span class="id">_</span> =&gt; <span class="id">isabs</span><br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ErgoTypeConcept">ErgoTypeConcept</a></span> <span class="id">isabs</span> <span class="id">_</span> <span class="id">_</span> =&gt; <span class="id">isabs</span><br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ErgoTypeEvent">ErgoTypeEvent</a></span> <span class="id">isabs</span> <span class="id">_</span> <span class="id">_</span> =&gt; <span class="id">isabs</span><br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ErgoTypeAsset">ErgoTypeAsset</a></span> <span class="id">isabs</span> <span class="id">_</span> <span class="id">_</span> =&gt; <span class="id">isabs</span><br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ErgoTypeParticipant">ErgoTypeParticipant</a></span> <span class="id">isabs</span> <span class="id">_</span> <span class="id">_</span> =&gt; <span class="id">isabs</span><br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ErgoTypeGlobal">ErgoTypeGlobal</a></span> <span class="id">_</span> =&gt; <span class="id"><a href="http://coq.inria.fr/library/Coq.Init.Datatypes.html#false">false</a></span><br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ErgoTypeFunction">ErgoTypeFunction</a></span> <span class="id">_</span> =&gt; <span class="id"><a href="http://coq.inria.fr/library/Coq.Init.Datatypes.html#false">false</a></span><br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ErgoTypeContract">ErgoTypeContract</a></span> <span class="id">_</span> <span class="id">_</span> <span class="id">_</span> =&gt; <span class="id"><a href="http://coq.inria.fr/library/Coq.Init.Datatypes.html#false">false</a></span><br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="kwd">end</span>.<br/>
<br/>
&nbsp;&nbsp;&nbsp;&nbsp;<span class="kwd">End</span> <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ErgoType.Ast.Abstract">Abstract</a></span>.<br/>
<br/>
&nbsp;&nbsp;&nbsp;&nbsp;<span class="kwd">Section</span> <span class="id"><a name="ErgoType.Ast.Enum">Enum</a></span>.<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="kwd">Definition</span> <span class="id"><a name="type_declaration_is_enum">type_declaration_is_enum</a></span><br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(<span class="id">d</span>:<span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ergo_type_declaration_desc">ergo_type_declaration_desc</a></span>)<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;: <span class="id"><a href="http://coq.inria.fr/library/Coq.Init.Datatypes.html#bool">bool</a></span> :=<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="kwd">match</span> <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#d">d</a></span> <span class="kwd">with</span><br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ErgoTypeEnum">ErgoTypeEnum</a></span> <span class="id">_</span> =&gt; <span class="id"><a href="http://coq.inria.fr/library/Coq.Init.Datatypes.html#true">true</a></span><br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| <span class="id">_</span> =&gt; <span class="id"><a href="http://coq.inria.fr/library/Coq.Init.Datatypes.html#false">false</a></span><br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="kwd">end</span>.<br/>
<br/>
&nbsp;&nbsp;<span class="kwd">End</span> <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ErgoType.Ast.Enum">Enum</a></span>.<br/>
&nbsp;&nbsp;<br/>
&nbsp;&nbsp;<span class="kwd">End</span> <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ErgoType.Ast">Ast</a></span>.<br/>
<br/>
&nbsp;&nbsp;<span class="kwd">Definition</span> <span class="id"><a name="rergo_type">rergo_type</a></span> {<span class="id">A</span>} : <span class="kwd">Set</span> := @<span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ergo_type">ergo_type</a></span> <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#A">A</a></span> <span class="id"><a href="ErgoSpec.Common.Utils.Names.html#relative_name">relative_name</a></span>.<br/>
&nbsp;&nbsp;<span class="kwd">Definition</span> <span class="id"><a name="rergo_type_signature">rergo_type_signature</a></span> {<span class="id">A</span>} : <span class="kwd">Set</span> := @<span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ergo_type_signature">ergo_type_signature</a></span> <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#A">A</a></span> <span class="id"><a href="ErgoSpec.Common.Utils.Names.html#relative_name">relative_name</a></span>.<br/>
&nbsp;&nbsp;<span class="kwd">Definition</span> <span class="id"><a name="rergo_type_declaration">rergo_type_declaration</a></span> {<span class="id">A</span>} : <span class="kwd">Set</span> := @<span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ergo_type_declaration">ergo_type_declaration</a></span> <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#A">A</a></span> <span class="id"><a href="ErgoSpec.Common.Utils.Names.html#relative_name">relative_name</a></span>.<br/>
&nbsp;&nbsp;<span class="kwd">Definition</span> <span class="id"><a name="rergo_type_declaration_desc">rergo_type_declaration_desc</a></span> {<span class="id">A</span>} : <span class="kwd">Set</span> := @<span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ergo_type_declaration_desc">ergo_type_declaration_desc</a></span> <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#A">A</a></span> <span class="id"><a href="ErgoSpec.Common.Utils.Names.html#relative_name">relative_name</a></span>.<br/>
<br/>
&nbsp;&nbsp;<span class="kwd">Definition</span> <span class="id"><a name="aergo_type">aergo_type</a></span> {<span class="id">A</span>} : <span class="kwd">Set</span> := @<span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ergo_type">ergo_type</a></span> <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#A">A</a></span> <span class="id"><a href="ErgoSpec.Common.Utils.Names.html#absolute_name">absolute_name</a></span>.<br/>
&nbsp;&nbsp;<span class="kwd">Definition</span> <span class="id"><a name="aergo_type_signature">aergo_type_signature</a></span> {<span class="id">A</span>} : <span class="kwd">Set</span> := @<span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ergo_type_signature">ergo_type_signature</a></span> <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#A">A</a></span> <span class="id"><a href="ErgoSpec.Common.Utils.Names.html#absolute_name">absolute_name</a></span>.<br/>
&nbsp;&nbsp;<span class="kwd">Definition</span> <span class="id"><a name="aergo_type_declaration_desc">aergo_type_declaration_desc</a></span> {<span class="id">A</span>} : <span class="kwd">Set</span> := @<span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ergo_type_declaration_desc">ergo_type_declaration_desc</a></span> <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#A">A</a></span> <span class="id"><a href="ErgoSpec.Common.Utils.Names.html#absolute_name">absolute_name</a></span>.<br/>
&nbsp;&nbsp;<span class="kwd">Definition</span> <span class="id"><a name="aergo_type_declaration">aergo_type_declaration</a></span> {<span class="id">A</span>} : <span class="kwd">Set</span> := @<span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ergo_type_declaration">ergo_type_declaration</a></span> <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#A">A</a></span> <span class="id"><a href="ErgoSpec.Common.Utils.Names.html#absolute_name">absolute_name</a></span>.<br/>
&nbsp;&nbsp;<br/>
&nbsp;&nbsp;<span class="kwd">Definition</span> <span class="id"><a name="lrergo_type">lrergo_type</a></span> : <span class="kwd">Set</span> := @<span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ergo_type">ergo_type</a></span> <span class="id"><a href="ErgoSpec.Common.Utils.Provenance.html#provenance">provenance</a></span> <span class="id"><a href="ErgoSpec.Common.Utils.Names.html#relative_name">relative_name</a></span>.<br/>
&nbsp;&nbsp;<span class="kwd">Definition</span> <span class="id"><a name="lrergo_type_signature">lrergo_type_signature</a></span> : <span class="kwd">Set</span> := @<span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ergo_type_signature">ergo_type_signature</a></span> <span class="id"><a href="ErgoSpec.Common.Utils.Provenance.html#provenance">provenance</a></span> <span class="id"><a href="ErgoSpec.Common.Utils.Names.html#relative_name">relative_name</a></span>.<br/>
&nbsp;&nbsp;<span class="kwd">Definition</span> <span class="id"><a name="lrergo_type_declaration_desc">lrergo_type_declaration_desc</a></span> : <span class="kwd">Set</span> := @<span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ergo_type_declaration_desc">ergo_type_declaration_desc</a></span> <span class="id"><a href="ErgoSpec.Common.Utils.Provenance.html#provenance">provenance</a></span> <span class="id"><a href="ErgoSpec.Common.Utils.Names.html#relative_name">relative_name</a></span>.<br/>
&nbsp;&nbsp;<span class="kwd">Definition</span> <span class="id"><a name="lrergo_type_declaration">lrergo_type_declaration</a></span> : <span class="kwd">Set</span> := @<span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ergo_type_declaration">ergo_type_declaration</a></span> <span class="id"><a href="ErgoSpec.Common.Utils.Provenance.html#provenance">provenance</a></span> <span class="id"><a href="ErgoSpec.Common.Utils.Names.html#relative_name">relative_name</a></span>.<br/>
<br/>
&nbsp;&nbsp;<span class="kwd">Definition</span> <span class="id"><a name="laergo_type">laergo_type</a></span> : <span class="kwd">Set</span> := @<span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ergo_type">ergo_type</a></span> <span class="id"><a href="ErgoSpec.Common.Utils.Provenance.html#provenance">provenance</a></span> <span class="id"><a href="ErgoSpec.Common.Utils.Names.html#absolute_name">absolute_name</a></span>.<br/>
&nbsp;&nbsp;<span class="kwd">Definition</span> <span class="id"><a name="laergo_type_signature">laergo_type_signature</a></span> : <span class="kwd">Set</span> := @<span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ergo_type_signature">ergo_type_signature</a></span> <span class="id"><a href="ErgoSpec.Common.Utils.Provenance.html#provenance">provenance</a></span> <span class="id"><a href="ErgoSpec.Common.Utils.Names.html#absolute_name">absolute_name</a></span>.<br/>
&nbsp;&nbsp;<span class="kwd">Definition</span> <span class="id"><a name="laergo_type_declaration">laergo_type_declaration</a></span> : <span class="kwd">Set</span> := @<span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ergo_type_declaration">ergo_type_declaration</a></span> <span class="id"><a href="ErgoSpec.Common.Utils.Provenance.html#provenance">provenance</a></span> <span class="id"><a href="ErgoSpec.Common.Utils.Names.html#absolute_name">absolute_name</a></span>.<br/>
&nbsp;&nbsp;<span class="kwd">Definition</span> <span class="id"><a name="laergo_type_declaration_desc">laergo_type_declaration_desc</a></span> : <span class="kwd">Set</span> := @<span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ergo_type_declaration_desc">ergo_type_declaration_desc</a></span> <span class="id"><a href="ErgoSpec.Common.Utils.Provenance.html#provenance">provenance</a></span> <span class="id"><a href="ErgoSpec.Common.Utils.Names.html#absolute_name">absolute_name</a></span>.<br/>
&nbsp;&nbsp;<br/>
&nbsp;&nbsp;<span class="kwd">Definition</span> <span class="id"><a name="lift_default_emits_type">lift_default_emits_type</a></span> (<span class="id">prov</span>:<span class="id"><a href="ErgoSpec.Common.Utils.Provenance.html#provenance">provenance</a></span>) (<span class="id">emits</span>:<span class="id"><a href="http://coq.inria.fr/library/Coq.Init.Datatypes.html#option">option</a></span> <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#laergo_type">laergo_type</a></span>) : <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#laergo_type">laergo_type</a></span> :=<br/>
&nbsp;&nbsp;&nbsp;&nbsp;<span class="kwd">match</span> <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#emits">emits</a></span> <span class="kwd">with</span><br/>
&nbsp;&nbsp;&nbsp;&nbsp;| <span class="id"><a href="http://coq.inria.fr/library/Coq.Init.Datatypes.html#Some">Some</a></span> <span class="id">e</span> =&gt; <span class="id">e</span><br/>
&nbsp;&nbsp;&nbsp;&nbsp;| <span class="id"><a href="http://coq.inria.fr/library/Coq.Init.Datatypes.html#None">None</a></span> =&gt; <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ErgoTypeClassRef">ErgoTypeClassRef</a></span> <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#prov">prov</a></span> <span class="id"><a href="ErgoSpec.Common.Utils.Names.html#default_emits_absolute_name">default_emits_absolute_name</a></span><br/>
&nbsp;&nbsp;&nbsp;&nbsp;<span class="kwd">end</span>.<br/>
<br/>
&nbsp;&nbsp;<span class="kwd">Definition</span> <span class="id"><a name="lift_default_state_type">lift_default_state_type</a></span> (<span class="id">prov</span>:<span class="id"><a href="ErgoSpec.Common.Utils.Provenance.html#provenance">provenance</a></span>) (<span class="id">state</span>:<span class="id"><a href="http://coq.inria.fr/library/Coq.Init.Datatypes.html#option">option</a></span> <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#laergo_type">laergo_type</a></span>) : <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#laergo_type">laergo_type</a></span> :=<br/>
&nbsp;&nbsp;&nbsp;&nbsp;<span class="kwd">match</span> <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#state">state</a></span> <span class="kwd">with</span><br/>
&nbsp;&nbsp;&nbsp;&nbsp;| <span class="id"><a href="http://coq.inria.fr/library/Coq.Init.Datatypes.html#Some">Some</a></span> <span class="id">e</span> =&gt; <span class="id">e</span><br/>
&nbsp;&nbsp;&nbsp;&nbsp;| <span class="id"><a href="http://coq.inria.fr/library/Coq.Init.Datatypes.html#None">None</a></span> =&gt; <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ErgoTypeClassRef">ErgoTypeClassRef</a></span> <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#prov">prov</a></span> <span class="id"><a href="ErgoSpec.Common.Utils.Names.html#default_state_absolute_name">default_state_absolute_name</a></span><br/>
&nbsp;&nbsp;&nbsp;&nbsp;<span class="kwd">end</span>.<br/>
<br/>
&nbsp;&nbsp;<span class="kwd">Definition</span> <span class="id"><a name="default_throws_type">default_throws_type</a></span> (<span class="id">prov</span>:<span class="id"><a href="ErgoSpec.Common.Utils.Provenance.html#provenance">provenance</a></span>) : <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#laergo_type">laergo_type</a></span> :=<br/>
&nbsp;&nbsp;&nbsp;&nbsp;<span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ErgoTypeClassRef">ErgoTypeClassRef</a></span> <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#prov">prov</a></span> <span class="id"><a href="ErgoSpec.Common.Utils.Names.html#default_error_absolute_name">default_error_absolute_name</a></span>.<br/>
<br/>
&nbsp;&nbsp;<span class="kwd">Definition</span> <span class="id"><a name="mk_success_type">mk_success_type</a></span> (<span class="id">prov</span>:<span class="id"><a href="ErgoSpec.Common.Utils.Provenance.html#provenance">provenance</a></span>) (<span class="id">response_type</span> <span class="id">state_type</span> <span class="id">emit_type</span>: <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#laergo_type">laergo_type</a></span>) : <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#laergo_type">laergo_type</a></span> :=<br/>
&nbsp;&nbsp;&nbsp;&nbsp;<span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ErgoTypeRecord">ErgoTypeRecord</a></span> <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#prov">prov</a></span><br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((<span class="id"><a href="ErgoSpec.Common.Utils.Names.html#this_response">this_response</a></span>,<span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#response_type">response_type</a></span>)<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::(<span class="id"><a href="ErgoSpec.Common.Utils.Names.html#this_state">this_state</a></span>,<span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#state_type">state_type</a></span>)<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::(<span class="id"><a href="ErgoSpec.Common.Utils.Names.html#this_emit">this_emit</a></span>,<span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ErgoTypeArray">ErgoTypeArray</a></span> <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#prov">prov</a></span> <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#emit_type">emit_type</a></span>)<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::<span class="id"><a href="http://coq.inria.fr/library/Coq.Init.Datatypes.html#nil">nil</a></span>)%<span class="id">string</span>.<br/>
<br/>
&nbsp;&nbsp;<span class="kwd">Definition</span> <span class="id"><a name="mk_error_type">mk_error_type</a></span> (<span class="id">prov</span>:<span class="id"><a href="ErgoSpec.Common.Utils.Provenance.html#provenance">provenance</a></span>) (<span class="id">throw_type</span>: <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#laergo_type">laergo_type</a></span>) : <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#laergo_type">laergo_type</a></span> := <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#throw_type">throw_type</a></span>.<br/>
&nbsp;&nbsp;<span class="kwd">Definition</span> <span class="id"><a name="mk_output_type">mk_output_type</a></span> (<span class="id">prov</span>:<span class="id"><a href="ErgoSpec.Common.Utils.Provenance.html#provenance">provenance</a></span>) (<span class="id">success_type</span> <span class="id">error_type</span>: <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#laergo_type">laergo_type</a></span>) : <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#laergo_type">laergo_type</a></span> :=<br/>
&nbsp;&nbsp;&nbsp;&nbsp;<span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ErgoTypeSum">ErgoTypeSum</a></span> <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#prov">prov</a></span> <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#success_type">success_type</a></span> <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#error_type">error_type</a></span>.<br/>
<br/>
&nbsp;&nbsp;<span class="kwd">Definition</span> <span class="id"><a name="lift_default_state_name">lift_default_state_name</a></span> (<span class="id">state</span>:<span class="id"><a href="http://coq.inria.fr/library/Coq.Init.Datatypes.html#option">option</a></span> <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#laergo_type">laergo_type</a></span>) : <span class="id"><a href="ErgoSpec.Common.Utils.Result.html#eresult">eresult</a></span> <span class="id"><a href="ErgoSpec.Common.Utils.Names.html#absolute_name">absolute_name</a></span> :=<br/>
&nbsp;&nbsp;&nbsp;&nbsp;<span class="kwd">match</span> <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#state">state</a></span> <span class="kwd">with</span><br/>
&nbsp;&nbsp;&nbsp;&nbsp;| <span class="id"><a href="http://coq.inria.fr/library/Coq.Init.Datatypes.html#None">None</a></span> =&gt; <span class="id"><a href="ErgoSpec.Common.Utils.Result.html#esuccess">esuccess</a></span> <span class="id"><a href="ErgoSpec.Common.Utils.Names.html#default_state_absolute_name">default_state_absolute_name</a></span><br/>
&nbsp;&nbsp;&nbsp;&nbsp;| <span class="id"><a href="http://coq.inria.fr/library/Coq.Init.Datatypes.html#Some">Some</a></span> <span class="id">et</span> =&gt;<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="kwd">match</span> <span class="id">et</span> <span class="kwd">with</span><br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ErgoTypeClassRef">ErgoTypeClassRef</a></span> <span class="id">_</span> <span class="id">r</span> =&gt; <span class="id"><a href="ErgoSpec.Common.Utils.Result.html#esuccess">esuccess</a></span> <span class="id">r</span><br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| <span class="id">_</span> =&gt; <span class="id"><a href="ErgoSpec.Common.Utils.Result.html#unresolved_name_error">unresolved_name_error</a></span> (<span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#type_annot">type_annot</a></span> <span class="id">et</span>)<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="kwd">end</span><br/>
&nbsp;&nbsp;&nbsp;&nbsp;<span class="kwd">end</span>.<br/>
<br/>
&nbsp;&nbsp;<span class="kwd">Section</span> <span class="id"><a name="ErgoType.Extends">Extends</a></span>.<br/>
&nbsp;&nbsp;&nbsp;&nbsp;<span class="kwd">Definition</span> <span class="id"><a name="fix_nothing">fix_nothing</a></span> (<span class="id">to</span>:<span class="id"><a href="ErgoSpec.Common.Utils.Names.html#absolute_name">absolute_name</a></span>) : <span class="id"><a href="http://coq.inria.fr/library/Coq.Init.Datatypes.html#list">list</a></span> (<span class="id"><a href="ErgoSpec.Common.Utils.Names.html#absolute_name">absolute_name</a></span> * <span class="id"><a href="ErgoSpec.Common.Utils.Names.html#absolute_name">absolute_name</a></span>) := <span class="id"><a href="http://coq.inria.fr/library/Coq.Init.Datatypes.html#nil">nil</a></span>.<br/>
&nbsp;&nbsp;&nbsp;&nbsp;<span class="kwd">Definition</span> <span class="id"><a name="fix_transaction">fix_transaction</a></span> (<span class="id">to</span>:<span class="id"><a href="ErgoSpec.Common.Utils.Names.html#absolute_name">absolute_name</a></span>) :=<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="kwd">if</span> <span class="id"><a href="http://coq.inria.fr/library/Coq.Strings.String.html#string_dec">string_dec</a></span> <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#to">to</a></span> "<span class="id">org.hyperledger.composer.system.Transaction</span>"%<span class="id">string</span><br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="kwd">then</span> <span class="id"><a href="http://coq.inria.fr/library/Coq.Init.Datatypes.html#nil">nil</a></span><br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="kwd">else</span> (<span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#to">to</a></span>, "<span class="id">org.hyperledger.composer.system.Transaction</span>"%<span class="id">string</span>) :: <span class="id"><a href="http://coq.inria.fr/library/Coq.Init.Datatypes.html#nil">nil</a></span>.<br/>
&nbsp;&nbsp;&nbsp;&nbsp;<span class="kwd">Definition</span> <span class="id"><a name="fix_event">fix_event</a></span> (<span class="id">to</span>:<span class="id"><a href="ErgoSpec.Common.Utils.Names.html#absolute_name">absolute_name</a></span>) :=<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="kwd">if</span> <span class="id"><a href="http://coq.inria.fr/library/Coq.Strings.String.html#string_dec">string_dec</a></span> <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#to">to</a></span> "<span class="id">org.hyperledger.composer.system.Event</span>"%<span class="id">string</span><br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="kwd">then</span> <span class="id"><a href="http://coq.inria.fr/library/Coq.Init.Datatypes.html#nil">nil</a></span><br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="kwd">else</span> (<span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#to">to</a></span>, "<span class="id">org.hyperledger.composer.system.Event</span>"%<span class="id">string</span>) :: <span class="id"><a href="http://coq.inria.fr/library/Coq.Init.Datatypes.html#nil">nil</a></span>.<br/>
&nbsp;&nbsp;&nbsp;&nbsp;<span class="kwd">Definition</span> <span class="id"><a name="fix_asset">fix_asset</a></span> (<span class="id">to</span>:<span class="id"><a href="ErgoSpec.Common.Utils.Names.html#absolute_name">absolute_name</a></span>) :=<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="kwd">if</span> <span class="id"><a href="http://coq.inria.fr/library/Coq.Strings.String.html#string_dec">string_dec</a></span> <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#to">to</a></span> "<span class="id">org.hyperledger.composer.system.Asset</span>"%<span class="id">string</span><br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="kwd">then</span> <span class="id"><a href="http://coq.inria.fr/library/Coq.Init.Datatypes.html#nil">nil</a></span><br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="kwd">else</span> (<span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#to">to</a></span>, "<span class="id">org.hyperledger.composer.system.Asset</span>"%<span class="id">string</span>) :: <span class="id"><a href="http://coq.inria.fr/library/Coq.Init.Datatypes.html#nil">nil</a></span>.<br/>
&nbsp;&nbsp;&nbsp;&nbsp;<span class="kwd">Definition</span> <span class="id"><a name="fix_participant">fix_participant</a></span> (<span class="id">to</span>:<span class="id"><a href="ErgoSpec.Common.Utils.Names.html#absolute_name">absolute_name</a></span>) :=<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="kwd">if</span> <span class="id"><a href="http://coq.inria.fr/library/Coq.Strings.String.html#string_dec">string_dec</a></span> <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#to">to</a></span> "<span class="id">org.hyperledger.composer.system.Participant</span>"%<span class="id">string</span><br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="kwd">then</span> <span class="id"><a href="http://coq.inria.fr/library/Coq.Init.Datatypes.html#nil">nil</a></span><br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="kwd">else</span> (<span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#to">to</a></span>, "<span class="id">org.hyperledger.composer.system.Participant</span>"%<span class="id">string</span>) :: <span class="id"><a href="http://coq.inria.fr/library/Coq.Init.Datatypes.html#nil">nil</a></span>.<br/>
&nbsp;&nbsp;&nbsp;&nbsp;<br/>
&nbsp;&nbsp;&nbsp;&nbsp;<span class="kwd">Definition</span> <span class="id"><a name="extends_rel">extends_rel</a></span><br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(<span class="id">fix_none</span>:<span class="id"><a href="ErgoSpec.Common.Utils.Names.html#absolute_name">absolute_name</a></span> -&gt; <span class="id"><a href="http://coq.inria.fr/library/Coq.Init.Datatypes.html#list">list</a></span> (<span class="id"><a href="ErgoSpec.Common.Utils.Names.html#absolute_name">absolute_name</a></span> * <span class="id"><a href="ErgoSpec.Common.Utils.Names.html#absolute_name">absolute_name</a></span>))<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(<span class="id">to</span>:<span class="id"><a href="ErgoSpec.Common.Utils.Names.html#absolute_name">absolute_name</a></span>)<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(<span class="id">e</span>:@<span class="id"><a href="ErgoSpec.Common.Utils.Ast.html#extends">extends</a></span> <span class="id"><a href="ErgoSpec.Common.Utils.Names.html#absolute_name">absolute_name</a></span>) : <span class="id"><a href="http://coq.inria.fr/library/Coq.Init.Datatypes.html#list">list</a></span> (<span class="id"><a href="ErgoSpec.Common.Utils.Names.html#absolute_name">absolute_name</a></span> * <span class="id"><a href="ErgoSpec.Common.Utils.Names.html#absolute_name">absolute_name</a></span>) :=<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="kwd">match</span> <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#e">e</a></span> <span class="kwd">with</span><br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| <span class="id"><a href="http://coq.inria.fr/library/Coq.Init.Datatypes.html#None">None</a></span> =&gt; <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#fix_none">fix_none</a></span> <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#to">to</a></span><br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| <span class="id"><a href="http://coq.inria.fr/library/Coq.Init.Datatypes.html#Some">Some</a></span> <span class="id">from</span> =&gt; (<span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#to">to</a></span>,<span class="id">from</span>) :: <span class="id"><a href="http://coq.inria.fr/library/Coq.Init.Datatypes.html#nil">nil</a></span><br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="kwd">end</span>.<br/>
<br/>
&nbsp;&nbsp;&nbsp;&nbsp;<span class="kwd">Definition</span> <span class="id"><a name="type_declaration_desc_extend_rel">type_declaration_desc_extend_rel</a></span><br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(<span class="id">to</span>:<span class="id"><a href="ErgoSpec.Common.Utils.Names.html#absolute_name">absolute_name</a></span>)<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(<span class="id">decl_desc</span>:<span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#laergo_type_declaration_desc">laergo_type_declaration_desc</a></span>) : <span class="id"><a href="http://coq.inria.fr/library/Coq.Init.Datatypes.html#list">list</a></span> (<span class="id"><a href="ErgoSpec.Common.Utils.Names.html#absolute_name">absolute_name</a></span> * <span class="id"><a href="ErgoSpec.Common.Utils.Names.html#absolute_name">absolute_name</a></span>) :=<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="kwd">match</span> <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#decl_desc">decl_desc</a></span> <span class="kwd">with</span><br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ErgoTypeEnum">ErgoTypeEnum</a></span> <span class="id">_</span> =&gt; <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#extends_rel">extends_rel</a></span> <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#fix_nothing">fix_nothing</a></span> <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#to">to</a></span> <span class="id"><a href="http://coq.inria.fr/library/Coq.Init.Datatypes.html#None">None</a></span><br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ErgoTypeTransaction">ErgoTypeTransaction</a></span> <span class="id">_</span> <span class="id">e</span> <span class="id">_</span> =&gt; <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#extends_rel">extends_rel</a></span> <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#fix_transaction">fix_transaction</a></span> <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#to">to</a></span> <span class="id">e</span><br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ErgoTypeConcept">ErgoTypeConcept</a></span> <span class="id">_</span> <span class="id">e</span> <span class="id">_</span> =&gt; <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#extends_rel">extends_rel</a></span> <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#fix_nothing">fix_nothing</a></span> <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#to">to</a></span> <span class="id">e</span><br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ErgoTypeEvent">ErgoTypeEvent</a></span> <span class="id">_</span> <span class="id">e</span> <span class="id">_</span> =&gt; <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#extends_rel">extends_rel</a></span> <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#fix_event">fix_event</a></span> <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#to">to</a></span> <span class="id">e</span><br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ErgoTypeAsset">ErgoTypeAsset</a></span> <span class="id">_</span> <span class="id">e</span> <span class="id">_</span> =&gt; <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#extends_rel">extends_rel</a></span> <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#fix_asset">fix_asset</a></span> <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#to">to</a></span> <span class="id">e</span><br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ErgoTypeParticipant">ErgoTypeParticipant</a></span> <span class="id">_</span> <span class="id">e</span> <span class="id">_</span> =&gt; <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#extends_rel">extends_rel</a></span> <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#fix_participant">fix_participant</a></span> <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#to">to</a></span> <span class="id">e</span><br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ErgoTypeGlobal">ErgoTypeGlobal</a></span> <span class="id">_</span> =&gt; <span class="id"><a href="http://coq.inria.fr/library/Coq.Init.Datatypes.html#nil">nil</a></span><br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ErgoTypeFunction">ErgoTypeFunction</a></span> <span class="id">_</span> =&gt; <span class="id"><a href="http://coq.inria.fr/library/Coq.Init.Datatypes.html#nil">nil</a></span><br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ErgoTypeContract">ErgoTypeContract</a></span> <span class="id">_</span> <span class="id">_</span> <span class="id">_</span> =&gt; <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#extends_rel">extends_rel</a></span> <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#fix_nothing">fix_nothing</a></span> <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#to">to</a></span> <span class="id"><a href="http://coq.inria.fr/library/Coq.Init.Datatypes.html#None">None</a></span><br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="kwd">end</span>.<br/>
<br/>
&nbsp;&nbsp;&nbsp;&nbsp;<span class="kwd">Definition</span> <span class="id"><a name="type_declaration_extend_rel">type_declaration_extend_rel</a></span><br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(<span class="id">decl</span>:<span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#laergo_type_declaration">laergo_type_declaration</a></span>) : <span class="id"><a href="http://coq.inria.fr/library/Coq.Init.Datatypes.html#list">list</a></span> (<span class="id"><a href="ErgoSpec.Common.Utils.Names.html#absolute_name">absolute_name</a></span> * <span class="id"><a href="ErgoSpec.Common.Utils.Names.html#absolute_name">absolute_name</a></span>) :=<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#type_declaration_desc_extend_rel">type_declaration_desc_extend_rel</a></span> <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#decl">decl</a></span>.(<span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#type_declaration_name">type_declaration_name</a></span>) <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#decl">decl</a></span>.(<span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#type_declaration_type">type_declaration_type</a></span>).<br/>
<br/>
&nbsp;&nbsp;&nbsp;&nbsp;<span class="kwd">Definition</span> <span class="id"><a name="type_declarations_extend_rel">type_declarations_extend_rel</a></span><br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(<span class="id">decls</span>:<span class="id"><a href="http://coq.inria.fr/library/Coq.Init.Datatypes.html#list">list</a></span> <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#laergo_type_declaration">laergo_type_declaration</a></span>) : <span class="id"><a href="http://coq.inria.fr/library/Coq.Init.Datatypes.html#list">list</a></span> (<span class="id"><a href="ErgoSpec.Common.Utils.Names.html#absolute_name">absolute_name</a></span> * <span class="id"><a href="ErgoSpec.Common.Utils.Names.html#absolute_name">absolute_name</a></span>) :=<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="id"><a href="http://coq.inria.fr/library/Coq.Lists.List.html#concat">List.concat</a></span> (<span class="id"><a href="http://coq.inria.fr/library/Coq.Lists.List.html#map">List.map</a></span> <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#type_declaration_extend_rel">type_declaration_extend_rel</a></span> <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#decls">decls</a></span>).<br/>
&nbsp;&nbsp;<span class="kwd">End</span> <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ErgoType.Extends">Extends</a></span>.<br/>
&nbsp;&nbsp;<br/>
<span class="kwd">End</span> <span class="id"><a href="ErgoSpec.Common.Types.ErgoType.html#ErgoType">ErgoType</a></span>.<br/>

</div>
<div class="footer"><hr/>Generated by <a href="https://github.com/xavierleroy/coq2html/">coq2html</div>
</body>
</html>
